package org.nidy.programexercise.DynamicProxyExercise;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class DynamicProxy {
    public static void main(String[] args) {
        BigStar bigStar = new BigStar("Nidy", 18, "男");
        //生成动态代理对象
        IStar proxy = DynamicProxy.createProxy(bigStar);
        //调用代理对象的方法
        String sing = proxy.sing("《夜空中最亮的星》");
        System.out.println(sing);
        proxy.dance();

    }
    public static IStar createProxy(BigStar bigStar){
        IStar iStar = (IStar) Proxy.newProxyInstance(
                //类加载器，指定用哪个类加载，去加载生成的代理
                DynamicProxy.class.getClassLoader(),
                //指定接口，指定代理类需要实现的接口，即有哪些方法可用
                new Class[]{IStar.class},
                //指定代理类，实现接口，实现接口中的方法，即要做什么事情
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        if ("sing".equals(method.getName())) {
                            System.out.println("Proxy_sing:代理开始");
                        } else if ("dance".equals(method.getName())) {
                            System.out.println("Proxy_dance:代理开始");
                        }
                        return method.invoke(bigStar, args);
                    }
                }
        );
        return iStar;
    }
}
